########################################
# make搜索路径的变量定义
VPATH = .:../bytetree:..
########################################
########################################
# 一些变量的定义
RM = rm -rf

CC = gcc
CXX = g++

LIB_TOTOTOY = libtototoy.a
#CFLAGS = $(TOTOTOY_DEBUG_OPTIONS) -g -I../bytetree -Wall
CXXFLAGS = $(TOTOTOY_DEBUG_OPTIONS) -g -I.. -Wall
CXXLFLAGS = $(TOTOTOY_DEBUG_OPTIONS) -L../ -ltototoy

TARGETS = private_test operate_unit_test link_list_test byte_tree_test hash_map_test trace_back_test

.PHONY : all

all: $(TARGETS)
########################################
# 定义OBJ生成规则
$(OBJS): %.o: %.cc
	$(CXX) -c $(CXXLFLAGS) $< -o $@
########################################

########################################
# private_test的单元测试
include .private_test.d
.private_test.d: .%.d: %.cc
	$(CXX) -M $(CXXFLAGS) $< > $@.$$$$; sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; rm -f $@.$$$$
private_test: private_test.o $(LIB_TOTOTOY)
	$(CXX) private_test.o -o $@ $(CXXLFLAGS)
########################################

########################################
# operate机制的单元测试
include .operate_unit_test.d
.operate_unit_test.d: .%.d: %.cc
	$(CXX) -M $(CXXFLAGS) $< > $@.$$$$; sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; rm -f $@.$$$$
operate_unit_test: operate_unit_test.o $(LIB_TOTOTOY)
	$(CXX) operate_unit_test.o -o $@ $(CXXLFLAGS)
########################################

########################################
# linklist的单元测试
include .link_list_test.d
.link_list_test.d: .%.d: %.cc
	$(CXX) -M $(CXXFLAGS) $< > $@.$$$$; sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; rm -f $@.$$$$
link_list_test: link_list_test.o $(LIB_TOTOTOY)
	$(CXX) link_list_test.o -o $@ $(CXXLFLAGS)
########################################

########################################
# bytetree的单元测试
include .byte_tree_test.d
.byte_tree_test.d: .%.d: %.cc
	$(CXX) -M $(CXXFLAGS) $< > $@.$$$$; sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; rm -f $@.$$$$
byte_tree_test: byte_tree_test.o $(LIB_TOTOTOY)
	$(CXX) byte_tree_test.o -o $@ $(CXXLFLAGS)
########################################

########################################
# hash_map_test的单元测试
include .hash_map_test.d
.hash_map_test.d: .%.d: %.cc
	$(CXX) -M $(CXXFLAGS) $< > $@.$$$$; sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; rm -f $@.$$$$
hash_map_test: hash_map_test.o $(LIB_TOTOTOY)
	$(CXX) hash_map_test.o -o $@ $(CXXLFLAGS)
########################################

########################################
# trace_back_test的单元测试
include .trace_back_test.d
.trace_back_test.d: .%.d: %.cc
	$(CXX) -M $(CXXFLAGS) $< > $@.$$$$; sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; rm -f $@.$$$$
trace_back_test: trace_back_test.o $(LIB_TOTOTOY)
	$(CXX) trace_back_test.o -o $@ $(CXXLFLAGS)
########################################

########################################
# clean
clean:
	@$(RM) *.o .*.d $(TARGETS) core.*
########################################
